package cc.mrbird.febs.common.utils;

import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 空间位置工具类
 * 提供地理编码功能，将地址转换为经纬度坐标
 * 使用百度地图API进行地理编码转换
 * 
 * @author MrBird
 */
public class SpaceUtil {

    /**
     * 百度地图API密钥
     * 用于调用百度地图地理编码服务
     */
    static String AK = "A73cbd90c90dc8f155d0a5ccd00e130c";

    /**
     * 测试方法
     * 用于演示地理编码功能的使用
     * 
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        String dom = "北京王府井";
        String coordinate = getCoordinate(dom);
        System.out.println("'" + dom + "'的经纬度为：" + coordinate);
        // System.err.println("######同步坐标已达到日配额6000限制，请明天再试！#####");
    }

    /**
     * 地理编码方法
     * 调用百度地图API将地址转换为经纬度坐标
     * 返回格式为"经度,纬度"的字符串
     * 
     * @param address 要转换的地址字符串
     * @return 经纬度坐标字符串，格式为"经度,纬度"，转换失败返回null
     */
    public static String getCoordinate(String address) {
        if (address != null && !"".equals(address)) {
            // 预处理地址字符串，去除空格，将#替换为"栋"
            address = address.replaceAll("\\s*", "").replace("#", "栋");
            // 构建百度地图API请求URL
            String url = "http://api.map.baidu.com/geocoder/v2/?address=" + address + "&output=json&ak=" + AK;
            // 发送HTTP请求获取响应
            String json = HttpUtil.get(url);
            System.out.println(json);
            // 解析响应JSON
            if (StrUtil.isNotEmpty(json)) {
                JSONObject obj = JSONUtil.parseObj(json);
                // 检查响应状态
                if ("0".equals(obj.get("status").toString())) {
                    // 提取经纬度信息
                    double lng = obj.getJSONObject("result").getJSONObject("location").getDouble("lng");
                    double lat = obj.getJSONObject("result").getJSONObject("location").getDouble("lat");
                    System.out.println(lng + "," + lat);
                    return lng + "," + lat;
                }
            }
            return null;
        }
        return null;
    }
}
